package com.joyd.joydlib

import androidx.compose.foundation.layout.Column
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.joyd.joydlib.composables.JoydButton
import com.joyd.joydlib.ui.theme.JoydLibTheme
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import androidx.activity.ComponentActivity

/**
 * JoydButton的仪器化测试
 * 在真实设备或模拟器上测试按钮的视觉效果和交互行为
 */
@RunWith(AndroidJUnit4::class)
class JoydButtonInstrumentedTest {

    // Android Compose测试规则，用于在Android环境中设置Compose测试
    @get:Rule
    val composeTestRule = createAndroidComposeRule<ComponentActivity>()

    /**
     * 测试按钮的点击事件在设备上是否能正确触发
     */
    @Test
    fun button_click_triggers_onClick() {
        // 创建一个模拟的点击事件监听器
        val onClick = mock<() -> Unit>()

        // 设置Compose内容
        composeTestRule.setContent {
            JoydLibTheme {
                JoydButton(text = "Test Button", onClick = onClick)
            }
        }

        // 执行点击操作
        composeTestRule.onNodeWithText("Test Button").performClick()

        // 验证点击事件是否被调用
        verify(onClick).invoke()
    }

    /**
     * 测试禁用状态下的按钮在设备上的显示效果
     */
    @Test
    fun button_disabled_state_displays_correctly() {
        // 设置Compose内容，创建一个禁用的按钮和一个启用的按钮进行对比
        composeTestRule.setContent {
            JoydLibTheme {
                Column {
                    JoydButton(text = "Enabled Button", onClick = {})
                    JoydButton(text = "Disabled Button", onClick = {}, enabled = false)
                }
            }
        }

        // 验证两个按钮都存在
        composeTestRule.onNodeWithText("Enabled Button").assertExists()
        composeTestRule.onNodeWithText("Disabled Button").assertExists()
        
        // 注意：在实际测试中，您可能需要使用更复杂的断言来验证按钮的视觉状态
        // 例如使用assertHasClickAction()来验证禁用的按钮没有点击动作
    }
}